<?php

namespace app\traits;

/**
 * @author      renjianfei
 * @datetime    2018/09/13
 */
trait Resources
{
    private $db = null;

    private $pk = 'id';

    private $softDeleteKey = 'visible';
    /**
     * 排序方式
     */
    protected function sort($sort = '')
    {
        return empty($sort) ? $this->pk .' desc' : $sort;
    }

    /**
     * 列表筛选
     */
    protected function filter()
    {
        $condition = input();
        unset($condition['page']);
        return array_filter($condition);
    }

    /**
     * @param $list 列表数据
     */
    protected function afterIndex($list = [])
    {
        // TODO xxxx
    }

    /**
     * 显示资源列表
     */
    public function index()
    {
        $list = $this->db->order($this->sort())->where($this->filter())->paginate();
        $this->afterIndex($list);
        return view('',[
            'list' => $list,
        ]);
    }

    /**
     * 显示创建资源表单前
     */
    public function beforeCreate()
    {
        
    }

    /**
     * 显示创建资源表单
     */
    public function create()
    {
        $this->beforeCreate();
        return view();
    }

    /**
     * 保存新建的资源前置操作
     */
    protected function beforeSave()
    {

    }

    /**
     * 保存新建的资源
     */
    public function save()
    {
        $this->beforeSave();
        $res = $this->db->allowField(true)->save(array_filter(input())) ? $this->success('操作成功') : $this->error('保存失败');
    }

    /**
     * 显示指定的资源
     */
    public function read($id)
    {
        $info = $this->db->findOrFail($id);
        return view('',[
            'info' => $info
        ]);
    }

    /**
     * 显示指定资源表单
     */
    public function edit($id)
    {
        $info = $this->db->findOrFail($id);
        return view('edit',[
            'info' => $info
        ]);
    }

    /**
     * 更新资源前
     */
    public function beforeUpdate()
    {
        
    }

    /**
     * 保存更新的资源
     */
    public function update($id)
    {
        $this->beforeUpdate();
        $this->db->allowField(true)->save(input(),[$this->pk => $id]) ? $this->success('保存成功',url('index')) : $this->error('保存失败');
    }

    /**
     * 软删除指定的资源
     */
    public function delete($id)
    {
        $this->db->update([
            $this->softDeleteKey => 0
        ],[
            'id' => $id
        ]);
    }

    /**
     * 真实删除某行记录
     */
    public function destroy($id)
    {
        $this->db->where('id', $id)->delete() ? $this->success('删除成功') : $this->error('删除失败');
    }

}